﻿/**
 * 设备检测工具
 */

// 缓存检测结果，避免重复计算
let _isMobileDevice = null;
let _isIOSDevice = null;
let _isAndroidDevice = null;

/**
 * 检测是否为移动设备
 * 使用多种方法综合判断，提高准确性
 */
export function isMobile() {
    // 如果已经计算过，直接返回缓存结果
    if (_isMobileDevice !== null) {
        return _isMobileDevice;
    }

    // 方法1: 使用userAgent检测
    const userAgent = navigator.userAgent.toLowerCase();
    const mobileRegex = /android|webos|iphone|ipad|ipod|blackberry|iemobile|opera mini|mobile|tablet|silk|kindle|phone/i;
    
    // 方法2: 检测屏幕尺寸
    const screenTest = window.innerWidth <= 800;
    
    // 方法3: 检测触摸点数量
    const touchTest = 'ontouchstart' in window || navigator.maxTouchPoints > 0;
    
    // 综合判断: 满足userAgent检测或同时满足屏幕尺寸和触摸点数量检测
    _isMobileDevice = mobileRegex.test(userAgent) || (screenTest && touchTest);
    
    return _isMobileDevice;
}

/**
 * 检测是否为iOS设备
 */
export function isIOS() {
    if (_isIOSDevice !== null) {
        return _isIOSDevice;
    }
    
    const userAgent = navigator.userAgent.toLowerCase();
    _isIOSDevice = /iphone|ipad|ipod/.test(userAgent) || 
                  (navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1); // 支持iPad检测
    
    return _isIOSDevice;
}

/**
 * 检测是否为Android设备
 */
export function isAndroid() {
    if (_isAndroidDevice !== null) {
        return _isAndroidDevice;
    }
    
    const userAgent = navigator.userAgent.toLowerCase();
    _isAndroidDevice = /android/.test(userAgent);
    
    return _isAndroidDevice;
}

/**
 * 重置设备检测缓存
 * 在窗口大小变化或其他可能改变设备状态的事件后调用
 */
export function resetDeviceDetection() {
    _isMobileDevice = null;
    _isIOSDevice = null;
    _isAndroidDevice = null;
}

// 监听窗口尺寸变化，重置设备检测缓存
window.addEventListener('resize', resetDeviceDetection);

// 在用户旋转设备时重置设备检测
window.addEventListener('orientationchange', resetDeviceDetection);
